package com.xuecheng.content.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xuecheng.api.conttent.mordle.dto.CourseBaseDTO;
import com.xuecheng.api.conttent.mordle.po.QueryCourseModel;
import com.xuecheng.common.domain.page.PageRequestParams;
import com.xuecheng.common.domain.page.PageVO;
import com.xuecheng.common.util.StringUtil;
import com.xuecheng.content.convert.CourseBaseConvert;
import com.xuecheng.content.entity.CourseBase;
import com.xuecheng.content.mapper.CourseBaseMapper;
import com.xuecheng.content.service.CourseBaseService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * <p>
 * 课程基本信息 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseBaseServiceImpl extends ServiceImpl<CourseBaseMapper, CourseBase> implements CourseBaseService {

    @Autowired
    private CourseBaseMapper courseBaseMapper;

    /*
     * 步骤分析：
     *  1.是否需要开启事务
     *  2.判断关键数据
     *       分页数据
     *       查询条件
     *  3.构建mp分页对象
     *  4.构建查询条件对象LambdaQueryWrapper
     *  5.查询数据
     *  6.获得数据并封装返回结果
     *       封装PageVo数据
     * */

    /**
     * @param params    分页请求参数，内含pageNo（当前页），pageSize（每页查询条数）
     * @param model     条件查询请求体，内含auditStatus（课程审核状态），courseName（课程名称）
     * @param companyId 教育机构id
     * @return
     */
    @Override
    public PageVO<CourseBaseDTO> queryCourseList(PageRequestParams params, QueryCourseModel model, Long companyId) {
        //判断关键数据
        if (params.getPageNo() < 0) {
            params.setPageNo(PageRequestParams.DEFAULT_PAGE_NUM);
        }
        if (params.getPageSize() < 0) {
            params.setPageSize(PageRequestParams.DEFAULT_PAGE_SIZE);
        }
        //查询条件
        LambdaQueryWrapper<CourseBase> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtil.isNotBlank(model.getAuditStatus())) {
            queryWrapper.eq(CourseBase::getAuditStatus, model.getAuditStatus());
        }
        if (StringUtil.isNotBlank(model.getCourseName())) {
            queryWrapper.like(CourseBase::getName, model.getCourseName());
        }

        queryWrapper.like(CourseBase::getName, model.getCourseName());

        //查询分页数据
        Page<CourseBase> page = new Page<>(params.getPageNo(), params.getPageSize());
        Page<CourseBase> basePage = this.page(page, queryWrapper);
        //当前页面数据
        List<CourseBase> records = basePage.getRecords();
        List<CourseBaseDTO> dtos = null;
        if (!CollectionUtils.isEmpty(records)) {
            dtos = CourseBaseConvert.INSTANCE.entitys2dtos(records);
        }
        //总页数
        long total = basePage.getTotal();
        //封装数据并返回
        PageVO<CourseBaseDTO> pageVO = new PageVO<>(dtos, total, params.getPageNo(), params.getPageSize());
        return pageVO;
    }


    /*
     * 1.开启事务
     * 2.判断关键数据
     *      (1)数据库的非空字段
     *      （2）前端的必要数据*
     *       (3)接口文档规定
     * 数据内容：companyId、name、mt、st、grade、teachmode、users、pic、charge、price
     * 如果必要数据每页给，抛出异常（终止程序，传递错误信息）
     * if(ObjectUtils.isEmpy(dto.getCompanyId)){
     * //业务异常：程序员做业务判断时，数据有问题
     * 异常：终止程序
     * 传递信息错误
     * 使用运行时异常抛出
     * }
     * */
    /**
     * @param dto vo转化后的dto数据
     * @return
     */
    @Override
    public CourseBaseDTO createCourseBase(CourseBaseDTO dto) {

        //判断关键数据是否非空
        if (ObjectUtils.isEmpty(dto.getCompanyId())) {
            log.info("公司id不能为空");
        }
        if (ObjectUtils.isEmpty(dto.getName())) {
            log.info("课程名称不能为空");
        }
        if (ObjectUtils.isEmpty(dto.getMt())) {
            log.info("大分类不能为空");
        }
        if (ObjectUtils.isEmpty(dto.getName())) {
            log.info("课程名称不能为空");
        }
        if (ObjectUtils.isEmpty(dto.getName())) {
            log.info("课程名称不能为空");
        }
        if (ObjectUtils.isEmpty(dto.getName())) {
            log.info("课程名称不能为空");
        }



        return null;
    }


}
